//
//  ContactController.m
//  Address-book
//
//  Created by 任伟 on 16/1/3.
//  Copyright © 2016年 任伟. All rights reserved.
//

#import "ContactController.h"
#import "AddViewController.h"
#import "EditViewController.h"
#import "ContactModel.h"

#define kContactsFilePath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"contacts.data"]

@interface ContactController () <UIActionSheetDelegate, AddViewControllerDelegate, EditViewControllerDelegate>

@property (nonatomic, strong) NSMutableArray *contacts;

@end

@implementation ContactController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.title = [NSString stringWithFormat:@"第%@个界面",self.username];
    
    // 初始化联系人信息
    self.contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:kContactsFilePath];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    [self.tableView reloadData];
}

/// 注销按钮的点击事件
- (IBAction)logout:(id)sender {
    
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"确定要注销吗" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"注销" otherButtonTitles:nil, nil];
    
    [sheet showInView:self.view];
}

#pragma mark - UIActionSheetDelegate
// acitonsheet上的按钮的点击事件 buttonIndex从上往下 依次从0递增
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 0) {
        
        // 注销
        [self.navigationController popViewControllerAnimated:YES];
    }
}


#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.contacts.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString* cellid = @"contactid";

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellid];
    
    // 获取模型数据
    ContactModel* contact = self.contacts[indexPath.row];
    // 赋值
    cell.textLabel.text = contact.name;
    cell.detailTextLabel.text = contact.number;
    
    return cell;

}

#pragma mark - UITableVeiwDelegate
// 进入编辑模式， 点击删除的时候调用
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    
    NSLog(@"点击删除的时候调用");
    
    // 删除数组中的元素(第一种方式)
//    ContactModel *con = self.contacts[indexPath.row];
//    [self.contacts removeObject:con];
    
    // 删除数组中的元素（第二种方式）
    [self.contacts removeObjectAtIndex:indexPath.row];
    
    // 删除 cell
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    
    // 归档
    [NSKeyedArchiver archiveRootObject:self.contacts toFile:kContactsFilePath];
    
    // 刷新数据
    [self.tableView reloadData];
    
}

// 编辑cell删除的文字
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {

    return @"任伟";
}

// 实现添加联系人的代理方法
- (void)addViewController:(AddViewController *)addViewController withContactModel:(ContactModel *)contactModel
{
    // 把回传过来的联系人添加到数组当中
    [self.contacts addObject:contactModel];
    
    // 刷新
    [self.tableView reloadData];
    
    // 归档
    [NSKeyedArchiver archiveRootObject:self.contacts toFile:kContactsFilePath];
}

// 实现编辑联系人的代理方法
- (void)editViewController:(EditViewController*)editViewController withContact:(ContactModel*)contact
{
    // 把传过来的联系人添加到数组中
    [self.contacts addObject:contact];
    
    [self.tableView reloadData];

    NSLog(@"%@", self.contacts);
    
    // 归档
    [NSKeyedArchiver archiveRootObject:self.contacts toFile:kContactsFilePath];

}


// 只要走sb的线 就一定执行 这个 方法
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
    // 获取目标控制器
    UIViewController* vc = segue.destinationViewController;
    // 判断vc是什么类型的
    if ([vc isKindOfClass:[AddViewController class]]) {
        // 设置代理
        AddViewController* add = (AddViewController*)vc;
        add.delegate = self;
    }
    else {
        EditViewController* edit = (EditViewController*)vc;
        //        edit.editBlock = ^(){
        //            [self.tableView reloadData];
        //        };
        // 设置代理
        //        edit.delegate = self;
        // 获取点击的cell的位置
        NSIndexPath* path = [self.tableView indexPathForSelectedRow];
        // 通过位置去获取数据
        edit.contact = self.contacts[path.row];
    }
}




#pragma mark - 懒加载控件
- (NSMutableArray *)contacts {

    if (_contacts == nil) {
        _contacts = [NSMutableArray array];
    }
    
    return _contacts;
}

@end
